В прошлый раз я обещал интегрировать разбор строки в проект и я это сделал. Создал новый класс.
class CHeaderAnaliz
{
public:
CString GetFileName;
CHeaderAnaliz();
virtual ~CHeaderAnaliz();
void GetLine(CString Str);
void Command(CString Str);
void GetCommand(CString Str);
};
Он практически ничем по логике не отличается от того, что делали в прошлый раз. Завел переменную, в которой будет находиться имя файла для отправки.
class CSeverWinSock
{
......
CString GetFiles;
.......
}
Теперь отправляется именно он:
afx_msg LRESULT CHTTPServerView::OnServerAccept(WPARAM wParam, LPARAM lParam)
{
.......
HTTPServer.SendFile(HTTPServer.GetFiles);
.......
Добавил функцию, что мол разбирается заголовок при чтении:
BOOL CSeverWinSock::ReadDataClient()
{
.......
GetFileHeader();
.......
}
А вот и она
void CSeverWinSock::GetFileHeader()
{
CString ss(bufferrecv);
CHeaderAnaliz ch;
ch.GetLine(ss);
if (ch.GetFileName!="")
GetFiles="c:\\host\\"+ ch.GetFileName;
}
Так как переменная класса локальная и будет создаваться каждый раз при чтении, то инициализацию файла отправки я поместил сюда:
CHeaderAnaliz::CHeaderAnaliz()
{
GetFileName="default.htm";
}
А в случае, если все-таки у нас чего-то попросили тогда вот как:
void CHeaderAnaliz::GetCommand(CString Str)
{
int i=Str.Find("/");
if (i != -1)
{
Str.Delete(0,i+1);
i=Str.Find("HTTP");
int l=Str.GetLength();
Str.Delete(i,l-i);
GetFileName=Str;
}
}
Работает !!! Работает по гиперссылке. Попробуйте. Если есть неясности грузите проект. Хотя гиперссылка работает иногда не очень стабильно. Кеши всякие и так далее. Но и с HTTP мы еще не разобрались. Только пробуем.